// 防抖函数
export const debounce = (func, wait, immediate) => {
  let timeout; // 定义一个计时器变量，用于延迟执行函数
  return function (...args) {
    // 返回一个包装后的函数
    const context = this; // 保存函数执行上下文对象
    const later = function () {
      // 定义延迟执行的函数
      timeout = null; // 清空计时器变量
      if (!immediate) func.apply(context, args); // 若非立即执行，则调用待防抖函数
    };
    const callNow = immediate && !timeout; // 是否立即调用函数的条件
    clearTimeout(timeout); // 清空计时器
    timeout = setTimeout(later, wait); // 创建新的计时器，延迟执行函数
    if (callNow) func.apply(context, args); // 如果满足立即调用条件，则立即执行函数
  };
};

// 节流函数
export const throttle = (func, wait) => {
  let timeout; // 定义一个计时器变量，用于限制函数调用频率
  return function (...args) {
    // 返回一个包装后的函数
    const context = this; // 保存函数执行上下文对象
    if (!timeout) {
      // 如果计时器不存在
      func.apply(context, args); // 执行函数
      timeout = setTimeout(() => {
        timeout = null; // 清空计时器变量
      }, wait); // 创建计时器，在指定时间后重置计时器变量
    }
  };
};
// 截取视频第一帧作为封面图 然后转成base64
export const getVideoBase64 = (url) => {
  return new Promise(function (resolve) {
    let dataURL = "";
    const video = document.createElement("video");
    video.setAttribute("crossOrigin", "anonymous"); // 处理跨域
    video.setAttribute("src", url);
    video.setAttribute("preload", "auto");
    video.addEventListener("loadeddata", function () {
      const canvas = document.createElement("canvas");
      console.log("video.clientWidth", video.videoWidth); // 视频宽
      console.log("video.clientHeight", video.videoHeight); // 视频高
      const width = video.videoWidth || 400; // canvas的尺寸和图片一样
      const height = video.videoHeight || 240; // 设置默认宽高为  400  240
      canvas.width = width;
      canvas.height = height;
      canvas.getContext("2d").drawImage(video, 0, 0, width, height); // 绘制canvas
      dataURL = canvas.toDataURL("image/jpeg"); // 转换为base64
      resolve(dataURL);
    });
  });
};
// base64转图片
export const getFileFromBase64 = (base64URL, filename) => {
  var arr = base64URL.split(","),
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new File([u8arr], filename, { type: "image/png" });
};

//截取url上？后的参数，转换为一个对象并返回
export const queryParse = (url) => {
  var paramObj = {};
  if (url.indexOf("?") > -1) {
    var _url = url.split("?")[1].split("#")[0];
    var strArr = _url.split("&");
    strArr.forEach((ele) => {
      var key = ele.split("=")[0];
      var val = ele.split("=")[1];
      paramObj[key] = val;
    });
  }
  return paramObj;
};
